Parse empty gx:coord elements in KML reader (#701)
authorAndreas Vögele <andreas@andreasvoegele.com>
Mon, 8 Mar 2021 13:08:50 +0000 (14:08 +0100)
committerGitHub <noreply@github.com>
Mon, 8 Mar 2021 13:08:50 +0000 (06:08 -0700)
Add test for empty gx:coord elements

kml.cc
reference/track/opentracks.kml [new file with mode: 0644]
reference/track/opentracks~kml.gpx [new file with mode: 0644]
testo.d/kml-read.test

diff --git a/kml.cc b/kml.cc
index fbcafba0775ed90252308f36c165d6d5de2074ce..48aa830c076e5d8477cccd71ddc61d492c452da1 100644 (file)
--- a/kml.cc
+++ b/kml.cc
@@ -341,7 +341,7 @@ void KmlFormat::gx_trk_coord(xg_string args, const QXmlStreamAttributes* /*attrs
 
   double lat, lon, alt;
   int n = sscanf(CSTR(args), "%lf %lf %lf", &lon, &lat, &alt);
-  if (0 != n && 2 != n && 3 != n) {
+  if (EOF != n && 2 != n && 3 != n) {
     fatal(MYNAME ": coord field decode failure on \"%s\".\n", qPrintable(args));
   }
   gx_trk_coords->append(std::make_tuple(n, lat, lon, alt));
diff --git a/reference/track/opentracks.kml b/reference/track/opentracks.kml
new file mode 100644 (file)
index 0000000..5b02c90
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2"
+xmlns:gx="http://www.google.com/kml/ext/2.2">
+<Document>
+<name><![CDATA[Wurmlinger Kapelle]]></name>
+<Placemark>
+<name><![CDATA[Wurmlinger Kapelle]]></name>
+<gx:MultiTrack>
+<altitudeMode>absolute</altitudeMode>
+<gx:interpolate>1</gx:interpolate>
+<gx:Track>
+<when>2021-03-02T09:30:40.993Z</when>
+<when>2021-03-02T09:30:41.890Z</when>
+<when>2021-03-02T12:34:53.912Z</when>
+<when>2021-03-02T12:34:54.693Z</when>
+<gx:coord/>
+<gx:coord>8.970803 48.503537 405.01373291015625</gx:coord>
+<gx:coord>8.970829 48.503623 401.119873046875</gx:coord>
+<gx:coord/>
+</gx:Track>
+</gx:MultiTrack>
+</Placemark>
+</Document>
+</kml>
diff --git a/reference/track/opentracks~kml.gpx b/reference/track/opentracks~kml.gpx
new file mode 100644 (file)
index 0000000..ef39132
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
+  <time>1970-01-01T00:00:00Z</time>
+  <bounds minlat="48.503537000" minlon="8.970803000" maxlat="48.503623000" maxlon="8.970829000"/>
+  <trk>
+    <name>Wurmlinger Kapelle</name>
+    <trkseg>
+      <trkpt lat="48.503537000" lon="8.970803000">
+        <ele>405.014</ele>
+        <time>2021-03-02T09:30:41.890Z</time>
+      </trkpt>
+      <trkpt lat="48.503623000" lon="8.970829000">
+        <ele>401.120</ele>
+        <time>2021-03-02T12:34:53.912Z</time>
+      </trkpt>
+    </trkseg>
+  </trk>
+</gpx>
index fbca3c5dd1f4b2c6bfaf8ae7b522ea4c7dff02c4..3353edf64de566b40b188fc155b076ca2619bcdf 100644 (file)
@@ -16,3 +16,6 @@ compare ${REFERENCE}/track/google_ext~kml.gpx ${TMPDIR}/google_ext~kml.gpx
 gpsbabel -i kml -f ${REFERENCE}/track/skydrop.kml -o igc -F - | grep -v "^L" > ${TMPDIR}/skydrop~kml.igc
 compare ${REFERENCE}/track/skydrop~kml.igc ${TMPDIR}/skydrop~kml.igc
 
+# Track with empty gx:coord elements.
+gpsbabel -i kml -f ${REFERENCE}/track/opentracks.kml -o gpx -F ${TMPDIR}/opentracks~kml.gpx
+compare ${REFERENCE}/track/opentracks~kml.gpx ${TMPDIR}/opentracks~kml.gpx